//这段代码在后端中的作用是提供一个全局的、静态的方式来访问 Spring 容器中的 ApplicationContext 实例。
// ApplicationContext 是 Spring 框架的核心接口之一，负责管理 Spring 应用中的所有 Beans 以及它们的生命周期。
// 通过实现 ApplicationContextAware 接口，这个类能够在 Spring 容器启动时自动获得并保存 ApplicationContext 实例。

package com.mindskip.xzs.configuration.application;

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;

// 使用 @Component 注解将该类注册为 Spring 容器中的一个组件
@Component
//实现 ApplicationContextAware 接口，使得 Spring 容器在创建这个组件时会调用 setApplicationContext 方法，将 ApplicationContext 实例传递给它。
//在 setApplicationContext 方法中，传入的 ApplicationContext 实例被赋值给静态变量 context，从而保存了 ApplicationContext 实例。
public class ApplicationContextProvider implements ApplicationContextAware {
    // 静态变量，保存 ApplicationContext 实例
    private static ApplicationContext context;

    // 私有构造函数，防止外部实例化该类
    private ApplicationContextProvider() {
    }

    // 重写 setApplicationContext 方法，当 Spring 创建该组件时会调用该方法
    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        // 将传入的 ApplicationContext 实例赋值给静态变量 context
        context = applicationContext;
    }

    // 提供一个静态方法，用于获取 ApplicationContext 实例
    public static ApplicationContext getContext() {
        return context;
    }
}

//通过这种方式，可以避免在各个需要使用 ApplicationContext 的地方进行依赖注入，简化代码结构。